// https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
// 3. 无重复字符的最长子串
/*
给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
示例 4:

输入: s = ""
输出: 0

提示：

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
*/
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
  let win = {}
  let left = (right = 0)
  let max = 0
  while (right < s.length) {
    let rChar = s[right]
    right++
    win[rChar] = (win[rChar] || 0) + 1
    while (win[rChar] >= 2) {
      let lChar = s[left]
      left++
      win[lChar]--
    }
    max = Math.max(right - left, max)
  }
  return max
}

// console.log(lengthOfLongestSubstring('abcabcbb')) // 3 'abc'
// console.log(lengthOfLongestSubstring('bbbbb')) // 1 'b'
// console.log(lengthOfLongestSubstring('pwwkew')) // 3 'wke'
// console.log(lengthOfLongestSubstring('')) // 0
// console.log(lengthOfLongestSubstring('a')) // 1
console.log(lengthOfLongestSubstring('au')) // 2
